#define SepChain /* Define the appropriate hash algorithm */

#ifdef SepChain
#include "hashsep.h"
#endif

#ifdef QuadProb
#include "hashquad.h"
#endif

#include <stdio.h>

#define NumItems 400

main()
{
    HashTable H;
    Position P;
    int i;
    int j = 0;
    int CurrentSize;

    H = InitializeTable(CurrentSize = 13);

    for (i = 0; i < NumItems; i++, j += 71)
    {
#ifdef QuadProb
        if (i > CurrentSize / 2)
        {
            H = Rehash(H);
            printf("Rehashing...\n");
            CurrentSize *= 2;
        }
#endif
        Insert(j, H);
    }

    for (i = 0, j = 0; i < NumItems; i++, j += 71)
#ifdef SepChain
        if ((P = Find(j, H)) == NULL || Retrieve(P) != j)
#endif
#ifdef QuadProb
            if (Retrieve((P = Find(j, H)), H) != j)
#endif
                printf("Error at %d\n", j);

    printf("End of program.\n");
    return 0;
}
